package com.test.config.page;

import com.github.pagehelper.PageHelper;

import java.util.List;
import java.util.function.BiFunction;
import java.util.function.Function;

/**
 * 分页服务封装
 *
 * @author lijinze
 */
public interface BasePageService {

    /**
     * 分页结果封装
     * @return
     */
    default <Q, R> PageResp<R> page(PageReq<Q> param, Function<Q, List<R>> function) {
        return PageResp.restPage(PageHelper.startPage(param).doSelectPageInfo(() -> function.apply(param.getParam())));
    }

    /**
     * 分页结果封装
     *
     * @return
     */
    default <Q1,Q2, R> PageResp<R> page(PageReq<Q1> param, Q2 param2 , Function<Q2,List<R>> function) {
        return PageResp.restPage(PageHelper.startPage(param).doSelectPageInfo(() -> function.apply(param2)));
    }

    /**
     * 分页结果封装
     *
     * @return
     */
    default <Q1, Q2, R> PageResp<R> page(PageReq<Q1> param1, Q2 param2, BiFunction<Q1, Q2, List<R>> function) {
        return PageResp.restPage(PageHelper.startPage(param1).doSelectPageInfo(() -> function.apply(param1.getParam(), param2)));
    }


    default <Q, R> List<R> list(Q q, Function<Q, List<R>> function) {
        return function.apply(q);
    }
}
